home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.util;
-
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.Random;
-
- public final class Security {
- private static final int NO_ERROR = -1;
- private long regCode;
- private long errDigit = -1L;
- private static final byte SCHEME_HASH_NAME_ORG = 7;
- private static final byte SCHEME_ID_BASED = 8;
- private static long[] SEED = new long[]{5866932300294644261L, 7024403726759890087L, 2748076388224288114L, -6132556317925417883L, -377129364045086088L, -7907032981491668086L, 1545863772813216586L, -2073066160489659954L, 214103949628198354L, 5343966063913332048L, -4762362384337982286L, -7998867701170400188L, 2496590497142445312L, -8588422786031584434L, -3310401677126329201L, 2156169837751358096L};
- public static byte LAUNCH_LIMIT_MASK = 1;
- public static byte BIZ_ONLY_MASK = 2;
- public static byte EXCELLON_30DAY_MASK = 4;
- private static Random random = new Random(System.currentTimeMillis());
-
- public static String generateRegCode7(byte var0, String var1, String var2, Calendar var3, int var4, byte var5) {
- return createRegCode7(var0, var1, var2, var3, var4, var5).format();
- }
-
- public static String generateRegCode8(byte var0, int var1, Calendar var2, int var3, byte var4) {
- return createRegCode8(var0, var1, var2, var3, var4).format();
- }
-
- public static Security createRegCode8(byte var0, int var1, Calendar var2, int var3, byte var4) {
- long var5 = 0L;
- var5 = setDigit(var5, (long)digit((long)var0, 0), 3);
- var5 = setDigit(var5, (long)digit((long)var1, 3), 8);
- var5 = setDigit(var5, (long)digit((long)var1, 2), 7);
- var5 = setDigit(var5, (long)digit((long)var1, 1), 0);
- var5 = setDigit(var5, (long)digit((long)var1, 0), 12);
- int var7 = var2.get(1);
- int var8 = var2.get(6);
- int var9 = (var7 - 1999) * 365 + var8;
- var5 = setDigit(var5, (long)digit((long)var9, 2), 10);
- var5 = setDigit(var5, (long)digit((long)var9, 1), 13);
- var5 = setDigit(var5, (long)digit((long)var9, 0), 1);
- var5 = setDigit(var5, (long)digit((long)var3, 1), 9);
- var5 = setDigit(var5, (long)digit((long)var3, 0), 2);
- var5 = setDigit(var5, (long)digit((long)var4, 0), 4);
- var5 = munge(var5);
- var5 = setDigit(var5, 8L, 5);
- var5 = checksum(var5);
- return new Security(var5);
- }
-
- public static Security createRegCode7(byte var0, String var1, String var2, Calendar var3, int var4, byte var5) {
- long var6 = 0L;
- var6 = setDigit(var6, (long)digit((long)var0, 0), 3);
- int var8 = hash(var1) ^ hash(var2);
- var6 = setDigit(var6, (long)digit((long)var8, 3), 8);
- var6 = setDigit(var6, (long)digit((long)var8, 2), 7);
- var6 = setDigit(var6, (long)digit((long)var8, 1), 0);
- var6 = setDigit(var6, (long)digit((long)var8, 0), 12);
- int var9 = var3.get(1);
- int var10 = var3.get(6);
- int var11 = (var9 - 1999) * 365 + var10;
- var6 = setDigit(var6, (long)digit((long)var11, 2), 10);
- var6 = setDigit(var6, (long)digit((long)var11, 1), 13);
- var6 = setDigit(var6, (long)digit((long)var11, 0), 1);
- var6 = setDigit(var6, (long)digit((long)var4, 1), 9);
- var6 = setDigit(var6, (long)digit((long)var4, 0), 2);
- var6 = setDigit(var6, (long)digit((long)var5, 0), 4);
- var6 = munge(var6);
- var6 = setDigit(var6, 7L, 5);
- var6 = checksum(var6);
- return new Security(var6);
- }
-
- private static boolean isKnownScheme(int var0) {
- return var0 == 7 || var0 == 8;
- }
-
- private static long parseLong(String var0) throws NumberFormatException {
- char var1 = var0.charAt(0);
- long var2 = (long)Character.digit(var1, 16);
- if (var2 > (long)7) {
- String var4 = var0.substring(1);
- var2 -= (long)8;
- var1 = (new Long(var2)).toString().charAt(0);
- String var5 = String.valueOf(var1).concat(String.valueOf(var0.substring(1)));
- long var6 = Long.parseLong(var5, 16);
- var6 = Long.MIN_VALUE + var6;
- if (!Long.toHexString(var6).equalsIgnoreCase(var0)) {
- Debug.trace(String.valueOf(String.valueOf(Long.toHexString(var6)).concat(String.valueOf(" != "))).concat(String.valueOf(var0)));
- }
-
- return var6;
- } else {
- return Long.parseLong(var0, 16);
- }
- }
-
- public static Security createRegCode(byte var0, String var1, String var2, String var3) {
- byte var4 = -1;
- var3 = StringUtilities.replace(var3, "-", "");
-
- try {
- long var5 = parseLong(var3);
- int var7 = digit(var5, 5);
- if (!isKnownScheme(var7)) {
- var4 = 5;
- }
-
- long var8 = checksum(var5);
- if (digit(var5, 6) != digit(var8, 6)) {
- var4 = 6;
- }
-
- if (digit(var5, 11) != digit(var8, 11)) {
- var4 = 11;
- }
-
- long var10 = unmunge(var5);
- switch (var7) {
- case 7:
- int var12 = hash(var1) ^ hash(var2);
- if (digit(var10, 8) != digit((long)var12, 3)) {
- var4 = 8;
- }
-
- if (digit(var10, 7) != digit((long)var12, 2)) {
- var4 = 7;
- }
-
- if (digit(var10, 0) != digit((long)var12, 1)) {
- var4 = 0;
- }
-
- if (digit(var10, 12) != digit((long)var12, 0)) {
- var4 = 12;
- }
- case 8:
- default:
- if (digit(var10, 3) != digit((long)var0, 0)) {
- var4 = 3;
- }
-
- Security var13 = new Security(munge(var10), var4);
- return var13;
- }
- } catch (RuntimeException var14) {
- ((Throwable)var14).printStackTrace();
- Security var6 = new Security(0L, 0);
- return var6;
- }
- }
-
- public boolean isValid() {
- return this.errDigit == (long)-1;
- }
-
- private Security(long var1) {
- this.regCode = var1;
- }
-
- private Security(long var1, int var3) {
- this.regCode = var1;
- this.errDigit = (long)var3;
- }
-
- private static String format(long var0) {
- StringBuffer var2 = new StringBuffer(Long.toHexString(var0));
- if (var2.length() < 16) {
- var2.insert(0, (new String("0000000000000000")).substring(0, 16 - var2.length()));
- }
-
- var2.insert(12, '-');
- var2.insert(8, '-');
- var2.insert(4, '-');
- return var2.toString();
- }
-
- public String format() {
- StringBuffer var1 = new StringBuffer(Long.toHexString(this.regCode));
- if (var1.length() < 16) {
- var1.insert(0, (new String("0000000000000000")).substring(0, 16 - var1.length()));
- }
-
- var1.insert(12, '-');
- var1.insert(8, '-');
- var1.insert(4, '-');
- return var1.toString().toUpperCase();
- }
-
- private long naked() {
- return unmunge(this.regCode);
- }
-
- public GregorianCalendar getExpirationDate() {
- int var1 = digit(this.regCode, 9);
- int var2 = digit(this.regCode, 2);
- int var3 = digit(this.naked(), 9) * 16 + digit(this.naked(), 2);
- if (var3 == 0) {
- return null;
- } else {
- GregorianCalendar var4 = this.getGenDate();
- var4.add(5, var3);
- return var4;
- }
- }
-
- public boolean isExpired() {
- int var1 = digit(this.naked(), 9) * 16 + digit(this.naked(), 2);
- if (var1 == 0) {
- return false;
- } else {
- GregorianCalendar var2 = this.getGenDate();
- var2.add(5, var1);
- return var2.before(new GregorianCalendar());
- }
- }
-
- public GregorianCalendar getGenDate() {
- int var1 = digit(this.naked(), 10) * 256 + digit(this.naked(), 13) * 16 + digit(this.naked(), 1);
- int var2 = 1999 + var1 / 365;
- int var3 = var1 % 365;
- return new GregorianCalendar(var2, 0, var3);
- }
-
- public int getRestrictions() {
- return digit(this.naked(), 4);
- }
-
- public boolean isLaunchLimited() {
- return (digit(this.naked(), 4) & LAUNCH_LIMIT_MASK) > 0;
- }
-
- public boolean isBizTalkOnly() {
- return (digit(this.naked(), 4) & BIZ_ONLY_MASK) > 0;
- }
-
- public boolean isExcellon30Day() {
- return (digit(this.naked(), 4) & EXCELLON_30DAY_MASK) > 0;
- }
-
- private static long setDigit(long var0, long var2, int var4) {
- var0 &= 15L << var4 * 4 ^ 0L - 1L;
- var0 |= var2 << var4 * 4;
- return var0;
- }
-
- private static int digit(long var0, int var2) {
- return (int)((var0 & 15L << var2 * 4) >>> var2 * 4);
- }
-
- private static int hash(String var0) {
- int var1 = 0;
- int var2 = 0;
- int var3 = var0.length();
- char[] var4 = var0.toCharArray();
- if (var3 < 16) {
- for(int var5 = var3; var5 > 0; --var5) {
- var1 = var1 * 37 + var4[var2++];
- }
- } else {
- int var7 = var3 / 8;
-
- for(int var6 = var3; var6 > 0; var2 += var7) {
- var1 = var1 * 39 + var4[var2];
- var6 -= var7;
- }
- }
-
- return var1;
- }
-
- private static long munge(long var0) {
- int var2 = Math.min(15, (int)(random.nextFloat() * (float)16));
- long var3 = var0 ^ SEED[var2];
- var3 = setDigit(var3, (long)var2, 14);
- return var3;
- }
-
- private static long checksum(long var0) {
- long var2 = setDigit(var0, 0L, 6);
- var2 = setDigit(var2, 0L, 11);
- long var4 = var2 / (long)13;
- var2 = setDigit(var2, (long)digit(var4, 1), 6);
- var2 = setDigit(var2, (long)digit(var4, 0), 11);
- return var2;
- }
-
- private static long unmunge(long var0) {
- int var2 = digit(var0, 14);
- var0 = setDigit(var0, 0L, 14);
- return var0 ^ SEED[var2];
- }
- }
-